package 中国.珍林.AI.图片.分类.Servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.Getter;
import lombok.extern.log4j.Log4j2;
import 中国.易.工具.Json工具;
import 中国.易.工具.Servlet工具;
import 中国.易.服务器.amis适配.对象.amis.图片;
import 中国.易.服务器.amis适配.对象.amis.增删改查;
import 中国.易.服务器.amis适配.对象.amis.工具;
import 中国.易.服务器.amis适配.对象.amis.工具_分页功能;
import 中国.易.服务器.amis适配.对象.amis.工具_统计功能;
import 中国.易.服务器.amis适配.对象.amis.接口;
import 中国.易.服务器.amis适配.对象.amis.数据展示.卡片;
import 中国.易.服务器.amis适配.对象.amis.文本输入框;
import 中国.易.服务器.amis适配.对象.amis.节点;
import 中国.易.服务器.amis适配.对象.amis.行为按钮;
import 中国.易.服务器.amis适配.对象.amis.表单;
import 中国.易.服务器.amis适配.对象.amis.表格列;
import 中国.易.服务器.amis适配.对象.amis.页面;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@Log4j2
@Getter
@WebServlet(urlPatterns = "/语义搜索图片")
public class 语义搜索图片页 extends HttpServlet
{
    protected String 页面模板;

    @Override
    public void init() throws ServletException
    {
        super.init();
        页面模板 = 生成模板字符串();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        Servlet工具.返回内容(resp, 页面模板, log);
    }

    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        页面模板 = 生成模板字符串();
        Servlet工具.返回内容(resp, 页面模板, log);
    }

    private String 生成模板字符串()
    {
        页面 p = new 页面();

        p.set页面标题("语义搜索图片");
        p.set内容区域(new ArrayList<>());

        p.get内容区域().add(生成增删改查区域());

        return Json工具.对象转字符串(p);
    }

    private 增删改查 生成增删改查区域()
    {
        增删改查 crud = new 增删改查();
        crud.set列表模式("cards");
        crud.setId("列表");
        crud.set批量操作列表(new ArrayList<>());
        crud.set固定表头(true);
        crud.set无数据时文字提示("无内容");
        crud.set支持隐藏过滤器(true);
        crud.set保留已选中的行(true);
        crud.set选中的行显示内容格式("ID：${id}");
        crud.set默认请求参数(new HashMap<>());
        crud.get默认请求参数().put("perPage", 15);
        crud.set显示列的个数(5);
        crud.set过滤器(生成过滤器表单());

        {
            接口 jk = new 接口();
            jk.set地址("/分类搜图");
            jk.set请求适配器(生成请求适配器js());
            jk.set接收适配器("return 批量查询转换(payload)");
            HashMap<String, Object> data = new HashMap<>();
            jk.set数据(data);

            crud.set列表数据接口(jk);
        }

        crud.set列表底部工具栏(生成列表底部工具栏());

        crud.set卡片(new 卡片());
        crud.get卡片().set内容(生成展示列());

        return crud;
    }

    public List<节点> 生成展示列()
    {
        List<节点> list = new ArrayList<>();

        {
            图片 tp = new 图片();
            tp.set原图地址("${缩略图+ '&s=1000'}");
            tp.set缩略图地址("${缩略图}");
            tp.set支持放大查看(true);
            tp.set放大查看时显示工具(true);
            list.add(tp);
        }
        {
            表格列 bgl = new 表格列();
            bgl.set数据名("名称");
            bgl.set表头文本内容("名称");
            list.add(bgl);
        }
        return list;
    }

    private List<节点> 生成列表底部工具栏()
    {
        List<节点> l = new ArrayList<>();
        {
            工具_统计功能 g = new 工具_统计功能();
            g.set对齐方式(工具.E对齐方式.左);
            l.add(g);
        }

        {
            工具_分页功能 g = new 工具_分页功能();
            g.set对齐方式(工具.E对齐方式.左);
            l.add(g);
        }

        return l;
    }

    private String 生成请求适配器js()
    {
        return """
                let 过滤标记 = 0;
                let data = {};
                data.大小 = context.perPage;
                data.开始 = (context.page - 1) * context.perPage;
                if(context.文字){
                    data.文字 = context.文字;
                }
                return {
                    ...api,
                    data: data
                }
                """;
    }

    private 表单 生成过滤器表单()
    {
        表单 bd = new 表单();
        bd.set标题("");
        bd.set展示方式(表单.E展示方式.inline);
        bd.set使用panel包裹(true);
        bd.setCss样式("m-b-sm");
        bd.set底部按钮(new ArrayList<>());

        bd.set表单项(new ArrayList<>());
        {
            文本输入框 k = new 文本输入框();
            k.set数据名("文字");
            k.set文本("文字");
            bd.get表单项().add(k);
        }

        {
            行为按钮 a = new 行为按钮();
            a.set样式(行为按钮.E样式.主要);
            a.set按钮文本("查询");
            a.set行为类型(行为按钮.E行为类型.submit);
            bd.get底部按钮().add(a);
        }

        {
            行为按钮 a = new 行为按钮();
            a.set样式(行为按钮.E样式.警告);
            a.set按钮文本("重置");
            a.set行为类型(行为按钮.E行为类型.reset);
            bd.get底部按钮().add(a);
        }

        return bd;
    }
}
